using System;
using System.Collections.Generic;
using System.Text;
using Entidades;
using DataAccessArquitectura;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

/*
 * Nombre archivo: gestiona_salidaBuilder.cs 
 *
 * Descripcion: Manipulacion de la tabla gestiona_salida, con los metodos de consulta, grabado, actulaizacion
 * y recuperacion de un registro
 *
 * Autor: PLUS-EW
 * Fecha: 15/09/2011 16:24:18
 *
 * Historial
 * ---------------------------------------------------------
 * Autor            Fecha               Modificación
 *
 */

namespace Reglas_Negocio
{
	public class gestiona_salidaBuilder
	{
		private const enmTipoBaseDatos mTipoBD = enmTipoBaseDatos.MySQL;

		#region < METODOS PUBLICOS CONSULTA >
		public static DataTable ListarTodos()
		{
			try
			{
				return ListarTodos("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static DataTable ListarTodos(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("*", "gestiona_salida", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static bool Existe(string filtro)
		{
			int numero = 0;
			bool r = false;
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				numero = Convert.ToInt32(bd.EjecutarSelectScalar("COUNT(*)", "gestiona_salida", filtro));
				r = (numero > 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS GRABADO >
		public static bool GrabarViaProcedimiento(gestiona_salida datos)
		{
			int numero = 0;
			bool r = false;
			string filtro = "";
			try
			{
				string strConectionInsert = "INSERT INTO gestiona_salida (fecha_gest_salida,quien_hizo_gest_salida,id_reg_e_s_fk,observacion_gest_salida,tipo_gest_salida,estado_gest_salida,regresa_gest_salida,se_reg_salida,tiempo_demora) VALUES (?fecha_gest_salida,?quien_hizo_gest_salida,?id_reg_e_s_fk,?observacion_gest_salida,?tipo_gest_salida,?estado_gest_salida,?regresa_gest_salida,?se_reg_salida,?tiempo_demora);";
				string strConectionUpdate = "UPDATE gestiona_salida SET fecha_gest_salida = ?fecha_gest_salida,quien_hizo_gest_salida = ?quien_hizo_gest_salida,id_reg_e_s_fk = ?id_reg_e_s_fk,observacion_gest_salida = ?observacion_gest_salida,tipo_gest_salida = ?tipo_gest_salida,estado_gest_salida = ?estado_gest_salida,regresa_gest_salida = ?regresa_gest_salida,se_reg_salida = ?se_reg_salida,tiempo_demora = ?tiempo_demora WHERE id_gest_salida=?id_gest_salida;";

				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				MySqlParameter psqlId_gest_salida = new MySqlParameter("?id_gest_salida", MySqlDbType.Int32);
				MySqlParameter psqlFecha_gest_salida = new MySqlParameter("?fecha_gest_salida", MySqlDbType.Datetime);
				MySqlParameter psqlQuien_hizo_gest_salida = new MySqlParameter("?quien_hizo_gest_salida", MySqlDbType.VarChar,200);
				MySqlParameter psqlId_reg_e_s_fk = new MySqlParameter("?id_reg_e_s_fk", MySqlDbType.Int32);
				MySqlParameter psqlObservacion_gest_salida = new MySqlParameter("?observacion_gest_salida", MySqlDbType.VarChar);
				MySqlParameter psqlTipo_gest_salida = new MySqlParameter("?tipo_gest_salida", MySqlDbType.VarChar,50);
				MySqlParameter psqlEstado_gest_salida = new MySqlParameter("?estado_gest_salida", MySqlDbType.VarChar,50);
				MySqlParameter psqlRegresa_gest_salida = new MySqlParameter("?regresa_gest_salida", MySqlDbType.VarChar,5);
				MySqlParameter psqlSe_reg_salida = new MySqlParameter("?se_reg_salida", MySqlDbType.Int32);
				MySqlParameter psqlTiempo_demora = new MySqlParameter("?tiempo_demora", MySqlDbType.VarChar,100);

				psqlId_gest_salida.Value = datos.Id_gest_salida;
				psqlFecha_gest_salida.Value = datos.Fecha_gest_salida;
				psqlQuien_hizo_gest_salida.Value = datos.Quien_hizo_gest_salida;
				psqlId_reg_e_s_fk.Value = datos.Id_reg_e_s_fk;
				psqlObservacion_gest_salida.Value = datos.Observacion_gest_salida;
				psqlTipo_gest_salida.Value = datos.Tipo_gest_salida;
				psqlEstado_gest_salida.Value = datos.Estado_gest_salida;
				psqlRegresa_gest_salida.Value = datos.Regresa_gest_salida;
				psqlSe_reg_salida.Value = datos.Se_reg_salida;
				psqlTiempo_demora.Value = datos.Tiempo_demora;

				if (!Existe("id_gest_salida=" + datos.Id_gest_salida))
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionInsert
							, psqlId_gest_salida
							, psqlFecha_gest_salida
							, psqlQuien_hizo_gest_salida
							, psqlId_reg_e_s_fk
							, psqlObservacion_gest_salida
							, psqlTipo_gest_salida
							, psqlEstado_gest_salida
							, psqlRegresa_gest_salida
							, psqlSe_reg_salida
							, psqlTiempo_demora
							);
					MessageBox.Show("Se grabo [gestiona_salida] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionUpdate
							, psqlId_gest_salida
							, psqlFecha_gest_salida
							, psqlQuien_hizo_gest_salida
							, psqlId_reg_e_s_fk
							, psqlObservacion_gest_salida
							, psqlTipo_gest_salida
							, psqlEstado_gest_salida
							, psqlRegresa_gest_salida
							, psqlSe_reg_salida
							, psqlTiempo_demora
							);
					MessageBox.Show("Se actualizó [gestiona_salida] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				r = (numero < 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static void GrabarViaSql(gestiona_salida datos)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
                string filtro = string.Format("id_gest_salida='{0}' OR (DATE(fecha_gest_salida)='{1}' AND estado_gest_salida='{2}' AND id_reg_e_s_fk='{3}' )", datos.Id_gest_salida, ValidarBuilder.FormatoFechaSinHoraCompara(datos.Fecha_gest_salida), datos.Estado_gest_salida, datos.Id_reg_e_s_fk);
				if (!Existe(filtro))
				{
					bd.EjecutarInsert("gestiona_salida"
						, new CampoValor("fecha_gest_salida",ValidarBuilder.FormatoFecha( datos.Fecha_gest_salida))
						, new CampoValor("quien_hizo_gest_salida", datos.Quien_hizo_gest_salida)
						, new CampoValor("id_reg_e_s_fk", datos.Id_reg_e_s_fk.ToString())
						, new CampoValor("observacion_gest_salida", datos.Observacion_gest_salida)
						, new CampoValor("tipo_gest_salida", datos.Tipo_gest_salida)
						, new CampoValor("estado_gest_salida", datos.Estado_gest_salida)
						, new CampoValor("regresa_gest_salida", datos.Regresa_gest_salida)
						, new CampoValor("se_reg_salida", datos.Se_reg_salida.ToString())
						, new CampoValor("tiempo_demora", datos.Tiempo_demora)
						);
                    //MessageBox.Show("Se grabo [gestiona_salida] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					bd.EjecutarUpdate("gestiona_salida", filtro
						, new CampoValor("fecha_gest_salida",ValidarBuilder.FormatoFecha( datos.Fecha_gest_salida))
						, new CampoValor("quien_hizo_gest_salida", datos.Quien_hizo_gest_salida)
						, new CampoValor("id_reg_e_s_fk", datos.Id_reg_e_s_fk.ToString())
						, new CampoValor("observacion_gest_salida", datos.Observacion_gest_salida)
						, new CampoValor("tipo_gest_salida", datos.Tipo_gest_salida)
						, new CampoValor("estado_gest_salida", datos.Estado_gest_salida)
						, new CampoValor("regresa_gest_salida", datos.Regresa_gest_salida)
						, new CampoValor("se_reg_salida", datos.Se_reg_salida.ToString())
						, new CampoValor("tiempo_demora", datos.Tiempo_demora)
						);
                    //MessageBox.Show("Se actualizó [gestiona_salida] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS RECUPERACION >
		public static gestiona_salida Recuperar(string filtro)
		{
			gestiona_salida r = new gestiona_salida();
			try
			{
				if (Existe(filtro))
				{
					DataTable ds = ListarTodos(filtro);
					r.Id_gest_salida = Convert.ToInt32(ds.Rows[0]["id_gest_salida"]);
					if (ds.Rows[0]["fecha_gest_salida"] != System.DBNull.Value)
						r.Fecha_gest_salida = Convert.ToDateTime(ds.Rows[0]["fecha_gest_salida"]);
					if (ds.Rows[0]["fecha_gest_salida"] == System.DBNull.Value)
						r.Fecha_gest_salida = DateTime.Now;
					if (ds.Rows[0]["quien_hizo_gest_salida"] != System.DBNull.Value)
						r.Quien_hizo_gest_salida = ds.Rows[0]["quien_hizo_gest_salida"].ToString();
					if (ds.Rows[0]["quien_hizo_gest_salida"] == System.DBNull.Value)
						r.Quien_hizo_gest_salida = "";
					r.Id_reg_e_s_fk = Convert.ToInt32(ds.Rows[0]["id_reg_e_s_fk"]);
					if (ds.Rows[0]["observacion_gest_salida"] != System.DBNull.Value)
						r.Observacion_gest_salida = ds.Rows[0]["observacion_gest_salida"].ToString();
					if (ds.Rows[0]["observacion_gest_salida"] == System.DBNull.Value)
						r.Observacion_gest_salida = "";
					if (ds.Rows[0]["tipo_gest_salida"] != System.DBNull.Value)
						r.Tipo_gest_salida = ds.Rows[0]["tipo_gest_salida"].ToString();
					if (ds.Rows[0]["tipo_gest_salida"] == System.DBNull.Value)
						r.Tipo_gest_salida = "";
					if (ds.Rows[0]["estado_gest_salida"] != System.DBNull.Value)
						r.Estado_gest_salida = ds.Rows[0]["estado_gest_salida"].ToString();
					if (ds.Rows[0]["estado_gest_salida"] == System.DBNull.Value)
						r.Estado_gest_salida = "";
					if (ds.Rows[0]["regresa_gest_salida"] != System.DBNull.Value)
						r.Regresa_gest_salida = ds.Rows[0]["regresa_gest_salida"].ToString();
					if (ds.Rows[0]["regresa_gest_salida"] == System.DBNull.Value)
						r.Regresa_gest_salida = "";
					r.Se_reg_salida = Convert.ToInt32(ds.Rows[0]["se_reg_salida"]);
					if (ds.Rows[0]["tiempo_demora"] != System.DBNull.Value)
						r.Tiempo_demora = ds.Rows[0]["tiempo_demora"].ToString();
					if (ds.Rows[0]["tiempo_demora"] == System.DBNull.Value)
						r.Tiempo_demora = "";
					r.Registro_es = registro_esBuilder.Recuperar("id_ent_sal=" + ds.Rows[0]["id_reg_e_s_fk"]);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS BORRADO >
		public static void Borrar(string filtro)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				bd.EjecutarDelete("gestiona_salida", filtro);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static void BorrarTodos()
		{
			try
			{
				Borrar("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS EXTRAS >
		public static void Listar_Combobox(ComboBox cmbgestiona_salida, string filtro, string nombre_display)
		{
			cmbgestiona_salida.DataSource = ListarTodos(filtro);
			cmbgestiona_salida.DisplayMember = nombre_display;
			cmbgestiona_salida.ValueMember = "id_gest_salida";
		}

		public static DataTable ListarTodos_Alias(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("id_gest_salida AS id_gest_salida,fecha_gest_salida AS fecha_gest_salida,quien_hizo_gest_salida AS quien_hizo_gest_salida,id_reg_e_s_fk AS id_reg_e_s_fk,observacion_gest_salida AS observacion_gest_salida,tipo_gest_salida AS tipo_gest_salida,estado_gest_salida AS estado_gest_salida,regresa_gest_salida AS regresa_gest_salida,se_reg_salida AS se_reg_salida,tiempo_demora AS tiempo_demora", "gestiona_salida", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static List<gestiona_salida> ListarTodos_List(string filtro)
		{
			List<gestiona_salida> r = new List<gestiona_salida>();
			try
			{
				DataTable dt = ListarTodos(filtro);
				for (int i = 0; i < dt.Rows.Count; i++)
					r.Add(Recuperar("id_gest_salida="+dt.Rows[i]["id_gest_salida"]));
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Registro_es(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "gestiona_salida.id_reg_e_s_fk = registro_es.id_ent_sal";
				else
					joins_ = "gestiona_salida.id_reg_e_s_fk = registro_es.id_ent_sal AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "gestiona_salida, registro_es","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Registro_es_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "gestiona_salida.id_gest_salida AS gestiona_salida.id_gest_salida,gestiona_salida.fecha_gest_salida AS gestiona_salida.fecha_gest_salida,gestiona_salida.quien_hizo_gest_salida AS gestiona_salida.quien_hizo_gest_salida,gestiona_salida.id_reg_e_s_fk AS gestiona_salida.id_reg_e_s_fk,gestiona_salida.observacion_gest_salida AS gestiona_salida.observacion_gest_salida,gestiona_salida.tipo_gest_salida AS gestiona_salida.tipo_gest_salida,gestiona_salida.estado_gest_salida AS gestiona_salida.estado_gest_salida,gestiona_salida.regresa_gest_salida AS gestiona_salida.regresa_gest_salida,gestiona_salida.se_reg_salida AS gestiona_salida.se_reg_salida,gestiona_salida.tiempo_demora AS gestiona_salida.tiempo_demora," + 
							 "registro_es.id_ent_sal AS registro_es.id_ent_sal,registro_es.fecha_ent_sal AS registro_es.fecha_ent_sal,registro_es.hora_entrada_ent_sal AS registro_es.hora_entrada_ent_sal,registro_es.hora_salida_ent_sal AS registro_es.hora_salida_ent_sal,registro_es.tipo_ent_sal AS registro_es.tipo_ent_sal,registro_es.estado_hora_salida_ent_sal AS registro_es.estado_hora_salida_ent_sal,registro_es.id_huella_fk AS registro_es.id_huella_fk,registro_es.id_cargahoraria_fk AS registro_es.id_cargahoraria_fk,registro_es.id_empleado_fk AS registro_es.id_empleado_fk,registro_es.descripcion_ent_sal AS registro_es.descripcion_ent_sal,registro_es.fecha_ent_sal_fin AS registro_es.fecha_ent_sal_fin,registro_es.tipo_trabajo AS registro_es.tipo_trabajo";
			try
			{
				if(filtro=="")
					joins_ = "gestiona_salida.id_reg_e_s_fk = registro_es.id_ent_sal";
				else
					joins_ = "gestiona_salida.id_reg_e_s_fk = registro_es.id_ent_sal AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "gestiona_salida, registro_es",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

        public static DataTable ListarTodos_Joins_Registro_es_Alias_personaliza(string filtro)
        {
            DataTable r = new DataTable();
            string joins_ = "";
            string campos_ = "gestiona_salida.id_gest_salida AS Codigo,gestiona_salida.quien_hizo_gest_salida AS \"Autorizado por\",gestiona_salida.observacion_gest_salida AS Observacion,gestiona_salida.tipo_gest_salida AS Tipo,gestiona_salida.estado_gest_salida AS Estado,gestiona_salida.regresa_gest_salida AS \"Regresa\",REPLACE(REPLACE(gestiona_salida.se_reg_salida,'0','NO'),'1','SI') AS \"Salio\",gestiona_salida.tiempo_demora AS \"Tiempo.utilizar\"," +
                             "registro_es.hora_salida_ent_sal AS \"Hora.Entrada\",registro_es.tipo_ent_sal AS Situacion";
            try
            {
                if (filtro == "")
                    joins_ = "gestiona_salida.id_reg_e_s_fk = registro_es.id_ent_sal";
                else
                    joins_ = "gestiona_salida.id_reg_e_s_fk = registro_es.id_ent_sal AND " + filtro;
                r = ValidarBuilder.ListarTodos(joins_, "gestiona_salida, registro_es", campos_).Tables[0];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return r;
        }

		public static DataTable ListarTodos_Joins(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "gestiona_salida.id_reg_e_s_fk = registro_es.id_ent_sal ";
				else
					joins_ = "gestiona_salida.id_reg_e_s_fk = registro_es.id_ent_sal AND  " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "registro_es,gestiona_salida","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "gestiona_salida.id_gest_salida AS gestiona_salida.id_gest_salida,gestiona_salida.fecha_gest_salida AS gestiona_salida.fecha_gest_salida,gestiona_salida.quien_hizo_gest_salida AS gestiona_salida.quien_hizo_gest_salida,gestiona_salida.id_reg_e_s_fk AS gestiona_salida.id_reg_e_s_fk,gestiona_salida.observacion_gest_salida AS gestiona_salida.observacion_gest_salida,gestiona_salida.tipo_gest_salida AS gestiona_salida.tipo_gest_salida,gestiona_salida.estado_gest_salida AS gestiona_salida.estado_gest_salida,gestiona_salida.regresa_gest_salida AS gestiona_salida.regresa_gest_salida,gestiona_salida.se_reg_salida AS gestiona_salida.se_reg_salida,gestiona_salida.tiempo_demora AS gestiona_salida.tiempo_demora," + 
							 "registro_es.id_ent_sal AS registro_es.id_ent_sal,registro_es.fecha_ent_sal AS registro_es.fecha_ent_sal,registro_es.hora_entrada_ent_sal AS registro_es.hora_entrada_ent_sal,registro_es.hora_salida_ent_sal AS registro_es.hora_salida_ent_sal,registro_es.tipo_ent_sal AS registro_es.tipo_ent_sal,registro_es.estado_hora_salida_ent_sal AS registro_es.estado_hora_salida_ent_sal,registro_es.id_huella_fk AS registro_es.id_huella_fk,registro_es.id_cargahoraria_fk AS registro_es.id_cargahoraria_fk,registro_es.id_empleado_fk AS registro_es.id_empleado_fk,registro_es.descripcion_ent_sal AS registro_es.descripcion_ent_sal,registro_es.fecha_ent_sal_fin AS registro_es.fecha_ent_sal_fin,registro_es.tipo_trabajo AS registro_es.tipo_trabajo";
			try
			{
				if(filtro=="")
					joins_ = "gestiona_salida.id_reg_e_s_fk = registro_es.id_ent_sal ";
				else
					joins_ = "gestiona_salida.id_reg_e_s_fk = registro_es.id_ent_sal AND  " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "registro_es,gestiona_salida",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		#endregion

		#region < METODOS PUBLICOS VALIDACION >
		public static gestiona_salida valida_campos_gestiona_salida(Control ctrl_id_gest_salida,DateTime dpk_fecha_gest_salida,TextBox txt_quien_hizo_gest_salida,Control ctrl_id_reg_e_s_fk,TextBox txt_observacion_gest_salida,TextBox txt_tipo_gest_salida,TextBox txt_estado_gest_salida,TextBox txt_regresa_gest_salida,Control ctrl_se_reg_salida,TextBox txt_tiempo_demora)
		{
			bool r = true;
			gestiona_salida new_gestiona_salida = new gestiona_salida();
			try
			{
				if(ctrl_id_gest_salida.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_gest_salida = (TextBox)ctrl_id_gest_salida;
					if (txt_id_gest_salida.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_gest_salida","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_gest_salida.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_gest_salida","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_gestiona_salida.Id_gest_salida = Convert.ToInt32(txt_id_gest_salida.Text);
				}
				if(ctrl_id_gest_salida.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_gest_salida = (ComboBox)ctrl_id_gest_salida;
					if (cmb_id_gest_salida.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_gest_salida","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_gestiona_salida.Id_gest_salida = Convert.ToInt32(cmb_id_gest_salida.SelectedValue);
				}
				if (r)
					new_gestiona_salida.Fecha_gest_salida = dpk_fecha_gest_salida;
				if (txt_quien_hizo_gest_salida.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la quien_hizo_gest_salida","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_gestiona_salida.Quien_hizo_gest_salida = txt_quien_hizo_gest_salida.Text;
				if(ctrl_id_reg_e_s_fk.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_reg_e_s_fk = (TextBox)ctrl_id_reg_e_s_fk;
					if (txt_id_reg_e_s_fk.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_reg_e_s_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_reg_e_s_fk.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_reg_e_s_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_gestiona_salida.Id_reg_e_s_fk = Convert.ToInt32(txt_id_reg_e_s_fk.Text);
				}
				if(ctrl_id_reg_e_s_fk.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_reg_e_s_fk = (ComboBox)ctrl_id_reg_e_s_fk;
					if (cmb_id_reg_e_s_fk.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_reg_e_s_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_gestiona_salida.Id_reg_e_s_fk = Convert.ToInt32(cmb_id_reg_e_s_fk.SelectedValue);
				}
				if (txt_observacion_gest_salida.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la observacion_gest_salida","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_gestiona_salida.Observacion_gest_salida = txt_observacion_gest_salida.Text;
				if (txt_tipo_gest_salida.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la tipo_gest_salida","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_gestiona_salida.Tipo_gest_salida = txt_tipo_gest_salida.Text;
				if (txt_estado_gest_salida.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la estado_gest_salida","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_gestiona_salida.Estado_gest_salida = txt_estado_gest_salida.Text;
				if (txt_regresa_gest_salida.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la regresa_gest_salida","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_gestiona_salida.Regresa_gest_salida = txt_regresa_gest_salida.Text;
				if(ctrl_se_reg_salida.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_se_reg_salida = (TextBox)ctrl_se_reg_salida;
					if (txt_se_reg_salida.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la se_reg_salida","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_se_reg_salida.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la se_reg_salida","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_gestiona_salida.Se_reg_salida = Convert.ToInt32(txt_se_reg_salida.Text);
				}
				if(ctrl_se_reg_salida.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_se_reg_salida = (ComboBox)ctrl_se_reg_salida;
					if (cmb_se_reg_salida.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la se_reg_salida","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_gestiona_salida.Se_reg_salida = Convert.ToInt32(cmb_se_reg_salida.SelectedValue);
				}
				if (txt_tiempo_demora.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la tiempo_demora","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_gestiona_salida.Tiempo_demora = txt_tiempo_demora.Text;

				if(!r)
					new_gestiona_salida = null;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return new_gestiona_salida;
		}

		public static void grabar_actualizar_registro(Control ctrl_id_gest_salida,DateTime dpk_fecha_gest_salida,TextBox txt_quien_hizo_gest_salida,Control ctrl_id_reg_e_s_fk,TextBox txt_observacion_gest_salida,TextBox txt_tipo_gest_salida,TextBox txt_estado_gest_salida,TextBox txt_regresa_gest_salida,Control ctrl_se_reg_salida,TextBox txt_tiempo_demora)
		{
			try
			{
				gestiona_salida new_gestiona_salida =valida_campos_gestiona_salida(ctrl_id_gest_salida,dpk_fecha_gest_salida,txt_quien_hizo_gest_salida,ctrl_id_reg_e_s_fk,txt_observacion_gest_salida,txt_tipo_gest_salida,txt_estado_gest_salida,txt_regresa_gest_salida,ctrl_se_reg_salida,txt_tiempo_demora); 
				if(new_gestiona_salida!=null)
					GrabarViaSql(new_gestiona_salida);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		#endregion

	}
}
